Java Technologies উদাহরণ সহ Validation Implementation গাইড ও নোট

223

স্প্রিং বুট অ্যাপ্লিকেশনে ভ্যালিডেশন অত্যন্ত গুরুত্বপূর্ণ, যা ব্যবহারকারীর ইনপুট সঠিকভাবে যাচাই করার জন্য ব্যবহৃত হয়। স্প্রিং বুটে ভ্যালিডেশন সাধারণত Javax Validation API বা Hibernate Validator ব্যবহার করে সম্পন্ন হয়। এটি ডেটা ভ্যালিডেশন এবং কাস্টম ভ্যালিডেশন ফিচার সরবরাহ করে।

স্প্রিং বুটের মধ্যে, আমরা @Valid এবং @NotNull, @Size, @Email ইত্যাদি অ্যানোটেশন ব্যবহার করে ভ্যালিডেশন ইমপ্লিমেন্ট করতে পারি।

এখানে একটি সাধারণ উদাহরণ দিয়ে স্প্রিং বুট অ্যাপ্লিকেশনে ভ্যালিডেশন কিভাবে কাজ করে তা ব্যাখ্যা করা হলো।


১. ভ্যালিডেশন ডিপেনডেন্সি যোগ করা

স্প্রিং বুট অ্যাপ্লিকেশনে ভ্যালিডেশন ব্যবহারের জন্য প্রথমে spring-boot-starter-validation ডিপেনডেন্সি pom.xml ফাইলে যোগ করতে হয়।

<dependencies>
    <!-- Spring Boot Starter Web -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    
    <!-- Spring Boot Starter Validation -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-validation</artifactId>
    </dependency>
</dependencies>

এটি Hibernate Validator ফ্রেমওয়ার্কের মাধ্যমে ডেটা ভ্যালিডেশন ফিচার সরবরাহ করে।


২. ভ্যালিডেশন অ্যানোটেশন ব্যবহার

স্প্রিং বুট অ্যাপ্লিকেশনে ভ্যালিডেশন অ্যানোটেশনগুলো বিভিন্ন ধরনের ইনপুট ভ্যালিডেশন করার জন্য ব্যবহৃত হয়। যেমন:

  • @NotNull: ভ্যালু নাল হতে পারবে না।
  • @Size: স্ট্রিং বা কলোপ্প ফিল্ডের আকার নির্ধারণ করে।
  • @Email: একটি বৈধ ইমেইল ফরম্যাটের জন্য।
  • @Min, @Max: সংখ্যার জন্য মিনিমাম এবং ম্যাক্সিমাম সীমা।
  • @Pattern: প্যাটার্ন মিলিয়ে ইনপুট যাচাই।

৩. ভ্যালিডেশন উদাহরণ

আমরা একটি User ক্লাস তৈরি করব, যাতে ব্যবহারকারীর ইনপুট যাচাই করা হবে।

User DTO ক্লাস তৈরি করা

import javax.validation.constraints.Email;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;

public class UserDTO {

    @NotNull(message = "Name cannot be null")
    @Size(min = 3, max = 50, message = "Name should be between 3 and 50 characters")
    private String name;

    @Email(message = "Please provide a valid email address")
    @NotNull(message = "Email cannot be null")
    private String email;

    @Min(value = 18, message = "Age should be at least 18")
    private int age;

    // Getters and Setters
}

এখানে:

  • @NotNull: নাম এবং ইমেইল ফিল্ডে নাল ইনপুট প্রতিরোধ করছে।
  • @Size: নামের জন্য মাপ নির্ধারণ করছে (3 থেকে 50 অক্ষরের মধ্যে হতে হবে)।
  • @Email: ইমেইল ফিল্ডের জন্য বৈধ ইমেইল ফরম্যাট চেক করছে।
  • @Min: বয়সের জন্য ১৮ এর নিচে প্রবেশ করা যাবে না।

Controller ক্লাস তৈরি করা

এখন আমরা একটি কন্ট্রোলার তৈরি করব, যেখানে ভ্যালিডেশন কার্যকর করা হবে।

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.*;

import javax.validation.Valid;

@RestController
@RequestMapping("/users")
public class UserController {

    @PostMapping
    public ResponseEntity<String> createUser(@RequestBody @Valid UserDTO userDTO, BindingResult result) {
        if (result.hasErrors()) {
            return ResponseEntity.badRequest().body(result.getAllErrors().toString());
        }
        return ResponseEntity.ok("User created successfully");
    }
}

এখানে:

  • @Valid: UserDTO অবজেক্টের উপর ভ্যালিডেশন প্রক্রিয়া চালাবে।
  • BindingResult: এটি @Valid অ্যানোটেশনের ফলস্বরূপ কোন ত্রুটি (error) হয়েছে কিনা তা ধারণ করবে।
  • result.hasErrors(): যদি কোনো ভ্যালিডেশন ত্রুটি থাকে, তবে তা badRequest এর মাধ্যমে ক্লায়েন্টকে ফেরত দেওয়া হবে।

৪. কাস্টম ভ্যালিডেশন (Custom Validation)

আপনি যদি কোনো কাস্টম ভ্যালিডেশন তৈরি করতে চান, তবে একটি কাস্টম অ্যানোটেশন তৈরি করতে হবে। নিচে একটি কাস্টম ভ্যালিডেশন উদাহরণ দেখানো হলো:

CustomAnnotation.java

import javax.validation.Constraint;
import javax.validation.Payload;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

// Custom Annotation
@Target({ElementType.FIELD, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = AgeValidator.class)  // Specifying the Validator class
public @interface ValidAge {
    String message() default "Age must be between 18 and 100";
    Class<?>[] groups() default {};
    Class<? extends Payload>[] payload() default {};
}

AgeValidator.java

import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;

public class AgeValidator implements ConstraintValidator<ValidAge, Integer> {

    @Override
    public void initialize(ValidAge validAge) {
    }

    @Override
    public boolean isValid(Integer age, ConstraintValidatorContext context) {
        return age >= 18 && age <= 100;  // Validate age between 18 and 100
    }
}

DTO ক্লাসে কাস্টম ভ্যালিডেশন ব্যবহার

public class UserDTO {

    @ValidAge
    private int age;

    // Getters and Setters
}

এখানে @ValidAge কাস্টম অ্যানোটেশনটি ১৮ থেকে ১০০ এর মধ্যে বয়স ভ্যালিডেট করবে।


৫. টেস্টিং

স্প্রিং বুট অ্যাপ্লিকেশন টেস্ট করার সময় আপনি ভ্যালিডেশন ফলস্বরূপ কিছু ত্রুটি দেখতে পারবেন। স্প্রিং বুটের @DataJpaTest বা @SpringBootTest ব্যবহার করে আপনি ভ্যালিডেশন টেস্ট করতে পারেন।


সারাংশ

স্প্রিং বুট অ্যাপ্লিকেশনে ভ্যালিডেশন ইমপ্লিমেন্টেশন খুব সহজ। আপনি স্প্রিং বুটের Javax Validation API বা Hibernate Validator ব্যবহার করে @Valid এবং অন্যান্য ভ্যালিডেশন অ্যানোটেশন যেমন @NotNull, @Size, @Email, @Min, @Pattern ইত্যাদি ব্যবহার করে ইনপুট ভ্যালিডেশন কার্যকর করতে পারেন। আপনি চাইলে কাস্টম ভ্যালিডেশন অ্যানোটেশনও তৈরি করতে পারেন। এসব ফিচারের মাধ্যমে ইনপুট সঠিকভাবে যাচাই করা সম্ভব হয়, যা নিরাপদ এবং সঠিক ডেটা গ্রহণে সহায়ক।

Content added By
Promotion

Are you sure to start over?

Loading...